
var fse = require('fs-extra')
var fs = require('fs')
var path = require('path')

var ffmpeg = require('fluent-ffmpeg');

/**
 * saveFilePath:存放文件路径
 * filePath:拷贝文件路径
 * copyCount：已经拷贝文件数
 */

function COPYFILE (saveFilePath) {
    this.saveFilePath = saveFilePath || "E://test2"
}
/** 
* 文件遍历方法 
* @param filePath 需要遍历的文件路径 
*/  
COPYFILE.prototype.InitCopyFile = function (filePath, callback) {
    var that = this
    var copyCount = 0
    fs.readdir(filePath, function (err, files) {
        if (err) {
            console.log(err)
        } else {
            //遍历读取到的文件列表  
            files.forEach(function (filename) {
                // 视频时长
                var videoDura = 0;
                //获取当前文件的绝对路径 
                var filedir = path.join(filePath, filename);
                //获取文件类型
                var _wjlx = that.GetFileType(path.extname(filedir))
                //根据文件路径获取文件信息，返回一个fs.Stats对象 
                fs.stat(filedir, function (eror, stats) {
                    if (eror) {
                        console.log('获取文件stats失败');
                    } else {
                        var isFile = stats.isFile(); //是文件  
                        var isDir = stats.isDirectory(); //是文件夹 
                        console.log("stats::",stats) 
                        if (isFile) {
                            var yearFile = stats.birthtime.getFullYear() + ''

                            var monthFile = (stats.birthtime.getMonth() + 1) > 9 ? stats.birthtime.getMonth() + 1 : '0' + (stats.birthtime.getMonth() + 1)

                            var xlh = filename.split('_') //系列号

                            that.CreateDir(yearFile).then(res => {
                                if (res.success) that.CreateDir(yearFile + '/' + monthFile).then(res => {
                                    let xlhFlieName = yearFile + '/' + monthFile + '/' + xlh[0]
                                    if (res.success) that.CreateDir(xlhFlieName).then(res => {
                                        //拷贝到文件路径
                                        var _filepath = path.join(res.pathfile, filename)
                                        that.GetFileDura(path.extname(_filepath), _filepath, function(spLongTime){
                                            videoDura = spLongTime
                                        })
                                        //复制文件信息
                                        fse.copy(filedir, _filepath, err => {
                                            if (err) return console.error(err)
                                            copyCount = copyCount +  1
                                            var copyfileInfor ={
                                                "wjbh": xlh[0],
                                                "wjbm": '',
                                                "pssj": stats.birthtime,
                                                "wjdx": stats.size,
                                                "wjlx": _wjlx,
                                                "ccfwq":"http://192.168.1.7:800",
                                                "ccwz": _filepath,
                                                "bfwz": "http://192.168.1.7:8000" + _filepath.split(/^E:\\test2/)[1],
                                                "wlwz": _filepath,
                                                "scsj": new Date(),
                                                "copyCount": copyCount,
                                                "copySpeed": (copyCount*100/files.length),
                                                "copyFileCount":files.length,
                                                "videoDura": videoDura,
                                                
                                            }
                                            callback(copyfileInfor)
                                            console.log("filedir::",filedir)
                                            console.log("进度::", copyCount*100/files.length)
                                            // fse.remove(filedir, function(err) {
                                            //     if (err) return console.error(err)
                                            //     console.log("success!")
                                            // })

                                        })
                                    })
                                })
                            })                                                              

                        }
                        if (isDir) {
                            that.InitCopyFile(filedir); //递归，如果是文件夹，就继续遍历该文件夹下面的文件  
                        }
                    }
                })
            });
        }
    });
}

//创建目录
COPYFILE.prototype.CreateDir = function (_newDirName) {
    var newfiledir = path.join(this.saveFilePath, _newDirName)
    return new Promise((resolve, reject) => {
        fs.exists(newfiledir, exists => {
            if (exists) {
                console.log("文件已经存在")
            } else {
                fs.mkdir(newfiledir, (err) => {
                    if (err) return console.log(err)
                    else console.log("创建文件成功")
                })
            }
            resolve({
                success: true,
                pathfile: newfiledir
            })
        })
    })
    
}
//写入JSON
COPYFILE.prototype.OutputJson = function (file, data) {
    fse.outputJson(file, data, function(err) {
        if(err) return console.log(err)
        console.log("写入成功")
    })
}
//读JSON
COPYFILE.prototype.ReadJson = function (file) {
    return new Promise((resolve,reject) => {
        fse.readJson(file, function(err, packageObj) {
            if(err) return console.log(err)
            resolve(packageObj) 
        });
    })
    
}
/**
 * 复制文件
 * @param {*} src 要复制的文件
 * @param {*} dest 复制到那个文件下
 * @param {*} callback 
 */
// function fileCopy(src, dest, filename, callback) {
//     var _filepath = path.join(dest, filename)
//     fs.readFile(src, 'base64', (err, data) => {
//         if (err) return console.log(err)
//         fs.writeFile(_filepath, data.toString(), 'base64', (err, data) => {
//             if (err) return console.log("复制失败")
//             else {
//                 console.log("写文件成功")
//                 callback()
//             }
//         })
//     })
// }

COPYFILE.prototype.GetFileType = function (param) {
    let result
    // let   param.toUpperCase()
    switch(param){
        case ".MP3": result="音频"; break;
        case ".MP4": result="视频"; break;
        case ".JPG":;
        case ".PNG": result="图片"; break;
        default: result="文件"
    }
    return result
}

//视频/音频时长
COPYFILE.prototype.GetFileDura = function (param,filepath,callback) {
    let result=0;
    if(param===".MP3"|| param===".MP4"){
        ffmpeg.ffprobe(filepath, function(err,metadata){
            if(err) return console.log(err)
            callback(metadata.format.duration)
        })
    }
}
